package com.cater.sys.controller;


import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.fastjson.JSONObject;
import com.cater.annotation.SystemControllerLog;
import com.cater.sys.entity.Resource;
import com.cater.sys.service.ResourceService;


/**
 * 
 * @描述:菜单
 * @作者 :ShenDong
 * @创建日期 :2016年12月7日8:41
 *
 */
@Controller
@RequestMapping("/menu")
public class MenuController{
	
	@Autowired
	ResourceService resourceService; 
	
	/**
	 * 
	 * @描述:打开资源编辑
	 * @方法名称 :getImage
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 * @param response
	 *
	 */
	@RequestMapping("/list")
	@SystemControllerLog(description = "查看资源")
	public ModelAndView menu(ModelAndView mv,HttpServletRequest request){
		List<Resource> resource = resourceService.getAllp();
		List<Resource> menu = new ArrayList<Resource>();
		for (Resource resource2 : resource) {
			resource2.setChildren(resourceService.getBypids(resource2.getId()));
			menu.add(resource2);
		}
		mv.addObject("menuList",menu);
		mv.setViewName("sys/menu/menu_list");
		
		return mv;
	}
	
	/**
	 * 
	 * @描述:加载资源子节
	 * @方法名称 :sub
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@ResponseBody
	@RequestMapping("/sub")
	public List<Resource> sub(@RequestParam String id,HttpServletRequest request){
		return resourceService.getBypids(Integer.parseInt(id));
	}
	
	/**
	 * 
	 * @描述:加载添加资源页面
	 * @方法名称 :toAdd
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@RequestMapping("/toAdd")
	public ModelAndView toAdd(ModelAndView mv,HttpServletRequest request){
		List<Resource> resource = resourceService.getAllp();
		List<Resource> menu = new ArrayList<Resource>();
		for (Resource resource2 : resource) {
			resource2.setChildren(resourceService.getBypids(resource2.getId()));
			menu.add(resource2);
		}
		mv.addObject("menuList",menu);
		mv.setViewName("sys/menu/menu_add");
		
		return mv;
	}
	
	
	/**
	 * 
	 * @描述:添加资源
	 * @方法名称 :add
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@ResponseBody
	@RequestMapping("/add")
	@SystemControllerLog(description = "添加资源")
	public JSONObject add(Resource resource,HttpServletRequest request){
		JSONObject json = new JSONObject();
		try {
			resourceService.save(resource);
			json.put("code", 200);
		} catch (Exception e) {
			e.printStackTrace();
			json.put("code", 999);
		}
		return json;
	}
	
	/**
	 * 
	 * @描述:删除资源
	 * @方法名称 :add
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@ResponseBody
	@RequestMapping("/del")
	@SystemControllerLog(description = "删除资源")
	public JSONObject del(@RequestParam Integer id,HttpServletRequest request){
		JSONObject json = new JSONObject();
		Resource resource = resourceService.getbyresourceId(id);
		if(resource.getParentId()!=0){
			List<Resource> reso = resourceService.getBypids(id);
			for (Resource resource2 : reso) {
				resourceService.delete(resource2.getId());
			}
		}
		try {
			resourceService.delete(id);
			json.put("code", 200);
		} catch (Exception e) {
			e.printStackTrace();
			json.put("code", 999);
		}
		return json;
	}
	
	/**
	 * 
	 * @描述:打开修改图片
	 * @方法名称 :add
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@RequestMapping("/toEditicon")
	public ModelAndView toEditicon(@RequestParam Integer id,ModelAndView mv,HttpServletRequest request){
		mv.addObject("id",id);
		mv.setViewName("sys/menu/menu_icon");
		return mv;
	}
	
	/**
	 * 
	 * @描述:修改图标
	 * @方法名称 :editicon
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@ResponseBody
	@RequestMapping("/editicon")
	@SystemControllerLog(description = "修改菜单图标")
	public JSONObject editicon(Integer id,String menuicon, HttpServletRequest request){
		JSONObject json = new JSONObject();
		Resource resource = resourceService.getbyresourceId(id);
		resource.setIcon(menuicon);
		try {
			resourceService.update(resource);
			json.put("code", 200);
		} catch (Exception e) {
			e.printStackTrace();
			json.put("code", 999);
		}
		return json;
	}
	
	
	/**
	 * 
	 * @描述:打开修改图片
	 * @方法名称 :add
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@RequestMapping("/toEdit")
	public ModelAndView toEdit(@RequestParam Integer id,ModelAndView mv,HttpServletRequest request){
		List<Resource> resources = resourceService.getAllp();
		List<Resource> menu = new ArrayList<Resource>();
		for (Resource resource2 : resources) {
			resource2.setChildren(resourceService.getBypids(resource2.getId()));
			menu.add(resource2);
		}
		mv.addObject("menuList",menu);
		Resource resource = resourceService.getbyresourceId(id);
		mv.addObject("resource",resource);
		mv.setViewName("sys/menu/menu_edit");
		return mv;
	}
	
	/**
	 * 
	 * @描述:修改资源
	 * @方法名称 :editicon
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@ResponseBody
	@RequestMapping("/Edit")
	@SystemControllerLog(description = "修改资源")
	public JSONObject Edit(Resource resource,HttpServletRequest request){
		if(resource.getParentId()==null){
			resource.setParentId(0);
		}
		JSONObject json = new JSONObject();
		try {
			resourceService.update(resource);
			json.put("code", 200);
		} catch (Exception e) {
			e.printStackTrace();
			json.put("code", 999);
		}
		return json;
	}
	
	/**
	 * 
	 * @描述:打开修改图片
	 * @方法名称 :add
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@RequestMapping("/toaddpermi")
	public ModelAndView toaddpermi(@RequestParam Integer id,ModelAndView mv,HttpServletRequest request){
		Resource resource = resourceService.getbyresourceId(id);
		mv.addObject("resource",resource);
		mv.setViewName("sys/menu/menu_addpermi");
		return mv;
	}
	
	/**
	 * 
	 * @描述:打开修改2级权限
	 * @方法名称 :add
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@RequestMapping("/toEdittow")
	public ModelAndView toEdittow(@RequestParam Integer id,@RequestParam Integer menuId,ModelAndView mv,HttpServletRequest request){
		Resource resourcep = resourceService.getbyresourceId(menuId);
		Resource resource = resourceService.getbyresourceId(id);
		mv.addObject("resourcep",resourcep);
		mv.addObject("resource",resource);
		mv.setViewName("sys/menu/menu_edittow");
		return mv;
	}
	
	/**
	 * 
	 * @描述:打开添加操作权限页面
	 * @方法名称 :toaddperm
	 * @作者 :ShenDong
	 * @创建日期 :2016年12月7日 上午12:23:00
	 * @param request
	 *
	 */
	@RequestMapping("/toaddperm")
	public ModelAndView toaddperm(@RequestParam Integer id,ModelAndView mv,HttpServletRequest request){
		Resource resourcep = resourceService.getbyresourceId(id);
		mv.addObject("resourcep",resourcep);
		mv.setViewName("sys/menu/menu_addperm");
		return mv;
	}
}
